<?php

namespace app\api\controller;

use think\Controller;

class Upload extends Controller
{
    /**
     * api公共上传文件
     */
    public function uploads()
    {
        $status = 0;
        $msg = "上传失败";
        $img = '';
        //1.获取一下提交的数据,包括上传文件
        $data = $this->request->param(true);
        //2获取一下上传的文件对象
        $file = $this->request->file('file');
        $path = $data['path'];
        $info = $file->move(ROOT_PATH . 'uploads' . DS . $path);
        if ($info) {
            // 成功上传后 获取上传信息
            // 输出 jpg
            //echo $info->getExtension(); 
            // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
            $status = 1;
            $msg = '上传成功';
            $img = $info->getSaveName();
            $ext = $info->getExtension();
            $size = $info->getSize();
        } else {
            $msg = "上传失败";
            // 上传失败获取错误信息
            //echo $file->getError();
        }
        return ['status' => $status, 'msg' => $msg, 'info' => $img, 'ext' => $ext, 'size' => $size];
    }

    /**
     * base64 上传图片
     * @param string $base64_img 图片base64编码
     * @param string $path 根目录
     * @param string $savepath 保存位置
     * @return array
     * */
    function baseimg_upload()
    {

        $status = 0;
        $msg = "上传失败";
        $img = '';
        //1.获取一下提交的数据,包括上传文件
        $data = $this->request->param(true);
        $path = $data['path'];
        $base64_img = $data['img'];
        $base64_img = str_replace('', '+', $base64_img);
        $up_dir = ROOT_PATH . 'uploads' . DS . $path;
        if (!file_exists($up_dir)) {
            mkdir($up_dir, 0777, true);
        }

        if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_img, $result)) {

            $type = $result[2];
            if (in_array($type, array('pjpeg', 'jpeg', 'jpg', 'gif', 'bmp', 'png'))) {
                $randStr = str_shuffle('1234567890'); //随机字符串
                $rand = substr($randStr, 0, 4); // 返回前四位
                $new_file = $up_dir . '/' . date('YmdHis') . $rand . '.' . $type;  //完整路径 + 图片名
                $img = date('YmdHis') . $rand . '.' . $type; //图片名

                if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_img)))) {
                    return json(['status' => 1, 'msg' => "图片上传成功", 'img' => $img]);
                }
                //上传失败
                return json(['status' => 0, 'msg' => "图片上传失败"]);
            }
            //文件类型错误
            return json(['status' => 0, 'msg' => "文件类型错误"]);
        }
        //文件错误
        return json(['status' => 0, 'msg' => "文件错误"]);
    }


    /**
     * base64 上传图片（多图）
     * @param string $base64_img 图片base64编码
     * @param string $path 根目录
     * @param string $savepath 保存位置
     * @return array
     * */
    function baseimgs_upload()
    {

        $status = 0;
        $msg = "上传失败";
        $img = '';
        //1.获取一下提交的数据,包括上传文件
        $data = $this->request->param(true);
        //  halt($data);
        $path = $data['path'];
        $imgArr = [];
        if (empty($data['img'])) {
        } else {

            if (count($data['img']) == 1) {

                $base64_img = $data['img'];
                $base64_img = str_replace('', '+', $base64_img);
                $up_dir = ROOT_PATH . 'uploads' . DS . $path;
                if (!file_exists($up_dir)) {
                    mkdir($up_dir, 0777, true);
                }
                // halt($base64_img);
                $base64_img = $base64_img[0];
                if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_img, $result)) {

                    $type = $result[2];
                    if (in_array($type, array('pjpeg', 'jpeg', 'jpg', 'gif', 'bmp', 'png'))) {
                        $randStr = str_shuffle('1234567890'); //随机字符串
                        $rand = substr($randStr, 0, 4); // 返回前四位
                        $new_file = $up_dir . '/' . date('YmdHis') . $rand . '.' . $type;  //完整路径 + 图片名
                        $img = date('YmdHis') . $rand . '.' . $type; //图片名

                        if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_img)))) {

                            array_push($imgArr, $img);
                            return json(['status' => 1, 'msg' => "图片上传成功", 'img' => $imgArr]);
                        }
                        //上传失败
                        return json(['status' => 0, 'msg' => "图片上传失败"]);
                    }
                    //文件类型错误
                    return json(['status' => 0, 'msg' => "文件类型错误"]);
                }
                //文件错误
                return json(['status' => 0, 'msg' => "文件错误"]);
            } else {
                //  echo  count($data['img']);
                //  halt($data['img'][0]);
                $flag = 0;
                for ($i = 0; $i < count($data['img']); $i++) {
                    $base64_img = $data['img'][$i];
                    $base64_img = str_replace('', '+', $base64_img);
                    $up_dir = ROOT_PATH . 'uploads' . DS . $path;
                    if (!file_exists($up_dir)) {
                        mkdir($up_dir, 0777, true);
                    }
                    $base64_img = $base64_img;
                    if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_img, $result)) {
                        $type = $result[2];
                        if (in_array($type, array('pjpeg', 'jpeg', 'jpg', 'gif', 'bmp', 'png'))) {
                            $randStr = str_shuffle('1234567890'); //随机字符串
                            $rand = substr($randStr, 0, 4); // 返回前四位
                            $new_file = $up_dir . '/' . date('YmdHis') . $rand . '.' . $type;  //完整路径 + 图片名
                            $img = date('YmdHis') . $rand . '.' . $type; //图片名

                            if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_img)))) {

                                array_push($imgArr, $img);
                                $flag = 1;
                                // return json(['status' => 1, 'msg' => "图片上传成功", 'img' => $imgArr]);
                            } else {
                                $flag = 0;
                            }
                            //上传失败
                            // return json(['status' => 0, 'msg' => "图片上传失败"]);
                        }
                        //文件类型错误
                        // return json(['status' => 0, 'msg' => "文件类型错误"]);
                    }
                    //文件错误
                    // return json(['status' => 0, 'msg' => "文件错误"]);
                }

                // return json(['status' => 1, 'msg' => "图片上传成功", 'img' => $imgArr]);
                // halt($flag);
                if ($flag == 1) {
                    return json(['status' => 1, 'msg' => "图片上传成功", 'img' => $imgArr]);
                } else {
                    return json(['status' => 0, 'msg' => "图片上传失败"]);
                }
            }
        }
    }






    /**
     * base64 上传图片
     * @param string $base64_img 图片base64编码
     * @param string $path 根目录
     * @param string $savepath 保存位置
     * @return array
     * */
    function video_upload()
    {

        $status = 0;
        $msg = "上传失败";
        $img = '';
        //1.获取一下提交的数据,包括上传文件
        $data = $this->request->param(true);
        $path = $data['path'];
        $base64_img = $data['img'];
        $base64_img = str_replace('', '+', $base64_img);
        $up_dir = ROOT_PATH . 'uploads' . DS . $path;
        if (isset($data['zyw'])) {
            $up_dir = ROOT_PATH . 'uploads' . DS . $path . DS . 'zyw';
        }

        if (!file_exists($up_dir)) {
            mkdir($up_dir, 0777, true);
        }

        if (preg_match('/^(data:\s*video\/(\w+);base64,)/', $base64_img, $result)) {

            $type = $result[2];
            if (in_array($type, array('mp4', 'wma', 'mov', 'AVI', 'rmvb', 'rm', 'FLV', '3GP'))) {
                $randStr = str_shuffle('1234567890'); //随机字符串
                $rand = substr($randStr, 0, 4); // 返回前四位
                $new_file = $up_dir . '/' . date('YmdHis') . $rand . '.' . $type;  //完整路径 + 图片名
                $img = date('YmdHis') . $rand . '.' . $type; //图片名

                if (file_put_contents($new_file, base64_decode(str_replace($result[1], '', $base64_img)))) {


                    return json(['status' => 1, 'msg' => "上传成功", 'video' => $img]);
                }
                //上传失败
                return json(['status' => 0, 'msg' => "上传失败"]);
            }
            //文件类型错误
            return json(['status' => 0, 'msg' => "文件类型错误"]);
        }
        //文件错误
        return json(['status' => 0, 'msg' => "文件错误"]);
    }
}
